<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Promise关键问题 - Promise 改变状态与指定回调的顺序问题</title>
</head>
<body>
    <script>
        
        /***
         *      改变 promise 状态和指定回调函数谁先谁后?
                (1) 都有可能, 正常情况下是先指定回调再改变状态, 但也可以先改状态再指定回调
                (2) 如何先改状态再指定回调? 
                    (2.1) 在执行器中直接调用 resolve()/reject()
                    (2.2) 延迟更长时间才调用 then() (给then方法设定时器延迟执行)
                (3) 什么时候才能得到数据? 
                    (3.1) 如果先指定的回调, 那当状态发生改变时, 回调函数就会调用, 得到数据
                    (3.2) 如果先改变的状态, 那当指定回调时, 回调函数就会调用, 得到数据
         ***/

         let p=new Promise((resovle,reject)=>{
                
                //当执行器函数是一个同步任务,直接去调resovle的时候,在这种情况下,就先改变promise对象的状态,后再去指定回调
                //这里执行器函数是一个同步任务
                //resovle('OK'); 
                
                //什么时候回调函数先执行呢?当执行器函数是一个异步任务的时候
                //这里执行器函数是一个异步任务(在使用Promise的时候是一个异步任务的时候是居多的,定时器、node的文件操作,数据库操作,ajax操作都是异步的)
                setTimeout(()=>{
                    resovle('OK');  //then方法先执行,改变状态后执行
                },1000);
         });

         p.then(value=>{
                console.log(value);
         },reason=>{

         });
        


    </script>
</body>
</html>